<?php
namespace frontend\models;

use Yii;
use yii\base\Model;
use common\models\User;

/**
 * Password reset request form
 */
class PasswordResetRequestForm extends Model
{
    public $username;
    public $mobile;
    public $email;

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['email', 'username'], 'filter', 'filter' => 'trim'],
            [['email', 'username'], 'required', 'message' => '{attribute}不能为空'],
            ['email', 'email', 'message' => '请输入正确的邮箱地址'],
            [['email', 'username'], 'exist',
             'targetClass' => '\common\models\User',
             'filter'      => ['status' => User::STATUS_ACTIVE],
             'message'     => '此{attribute}没有注册'
            ],
        ];
    }


    public function attributeLabels()
    {
        return [
            'username' => '用户名',
            'email'    => '邮箱',
        ];
    }


    /**
     * Sends an email with a link, for resetting the password.
     *
     * @return boolean whether the email was send
     */
    public function sendEmail()
    {
        /* @var $user User */
        $user = User::findOne([
                                  'status' => User::STATUS_ACTIVE,
                                  'username'  => $this->username,
                                  'email'  => $this->email,
                              ]);

        if (!$user) {
            return false;
        }

        if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
            $user->generatePasswordResetToken();
        }

        if (!$user->save()) {
            return false;
        }

        return Yii::$app
            ->mailer
            ->compose(
                ['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'],
                ['user' => $user]
            )
            ->setTo($this->email)
            ->setSubject(' ' . Yii::$app->name)
            ->send();
    }
}
